package com.glink.manage.service;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.VehicleAccessRelaBean;
import com.baomidou.mybatisplus.extension.service.IService;

import com.glink.manage.dto.vehicle.VehicleAccessCycleSaveDTO;
import com.glink.manage.dto.vehicle.VehicleAccessIdDTO;
import com.glink.manage.dto.vehicle.VehicleAccessPageDTO;

import com.glink.manage.vo.vehicle.VehicleAccessPageVO;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface VehicleAccessRelaService extends IService<VehicleAccessRelaBean>{

    /**
     * 分页查询准入
     * @param vehicleAccessPageDTO 查询条件
     * @return 信息
     */
    IPage<VehicleAccessPageVO> pageByAccess(VehicleAccessPageDTO vehicleAccessPageDTO) throws GeneralSimpleException;

    /**
     * 删除准入工程
     * @param vehicleAccessIdDTO 删除条件
     * @return 删除状态
     */
    Boolean delAccessWork(VehicleAccessIdDTO vehicleAccessIdDTO);

    /**
     * 更新主准入工程
     * @param vehicleAccessCycleSaveDTO 更新信息
     * @return 状态
     */
    Boolean updateAccessCycle(VehicleAccessCycleSaveDTO vehicleAccessCycleSaveDTO);

    /**
     * 删除准入
     * @param constructionWorkObjId 工程
     * @param participatingUnitObjId 参建单位
     * @param nowDate 当前时间
     */
    boolean delAccessByWorkObjIdAndUnitObjIdAndCycleStartGt(String constructionWorkObjId, String participatingUnitObjId, String nowDate);

    /**
     * 更新准入
     * @param constructionWorkObjId 工程
     * @param participatingUnitObjId 参建单位
     * @param nowDate 当前时间
     */
    void updateAccessCycleEndByWorkObjIdAndUnitObjIdAndCycleStartGtAndCycleEndLt(String constructionWorkObjId, String participatingUnitObjId, String nowDate);

    /**
     * 根据工程查询准入的车辆
     * @param workId 工程ID
     * @return 准入的车辆ID
     */
    List<String> findVehicleIdByWorkId(String workId);

    /**
     * 根据车辆信息查询准入的工程
     * @param vehicleId 车辆ID
     * @return 准入工程ID
     */
    List<String> findWorkIdByPersonId(String vehicleId);

    /**
     * 根据工程查询准入信息
     * @param constructionWorkObjId 工程ID
     * @param dateTime 时间
     * @return 准入信息
     */
    List<VehicleAccessRelaBean> findAccessInfoByCycleEndGe(String constructionWorkObjId, DateTime dateTime);

    /**
     * 根据车辆信息查询准入信息
     * @param vehicleId 车辆ID
     * @param dateTime 时间
     * @return 准入信息
     */
    List<VehicleAccessRelaBean> findAccessInfoByVehicleIdAndCycleEndGe(String vehicleId, DateTime dateTime);
}
